package com.klm.enumeration;

import com.klm.config.local.TranslateThreadLocal;
import lombok.Getter;

import java.util.HashMap;
import java.util.Map;

/**
 * @author wangq
 */
@Getter
public enum LangCodeEnum {
    EN("en", "British English"),
    EN_US("en_US", "American English"),
    ZH_CN("zh_CN", "简体中文"),
    ZH_TW("zh_TW", "繁體中文"),
    ZH_HK("zh_HK", "繁體中文"),
    JA("ja", "日本語"),
    THAI("th", "ภาษาไทย"),
    FR("fr", "Français"),
    DE("de", "Deutsch");

    private final String langCode;
    private final String langText;

    // 旧代码到新代码的映射
    private static final Map<String, String> OLD_CODE_MAP = new HashMap<>();

    static {
        // 初始化旧代码映射
        OLD_CODE_MAP.put("EN", "en");
        OLD_CODE_MAP.put("TC", "zh_TW");
        // 可以继续添加其他旧代码映射
    }

    /**
     * 获取默认语言编码
     * @return 默认语言编码
     */
    public static String getDefaultCode() {
        return LangCodeEnum.EN.getLangCode(); // 或者可以抛出一个异常，表示没有找到对应的枚举项
    }

    LangCodeEnum(String langCode, String langText) {
        this.langCode = langCode;
        this.langText = langText;
    }

    // 根据langCode获取对应的langText
    public static String getLangTextByCode(String code) {
        // 尝试将旧代码转换为新代码
        String newCode = OLD_CODE_MAP.get(code);
        if (newCode != null) {
            code = newCode;
        }

        for (LangCodeEnum language : LangCodeEnum.values()) {
            if (language.getLangCode().equals(code)) {
                return language.getLangText();
            }
        }
        return null; // 或者可以抛出一个异常，表示没有找到对应的枚举项
    }

    /**
     * 校验语种代码有效性
     * @param code 语言编码
     * @return true：有效；false：无效
     */
    public static boolean contains(String code) {
        // 尝试将旧代码转换为新代码
        String newCode = OLD_CODE_MAP.get(code);
        if (newCode != null) {
            code = newCode;
        }

        for (LangCodeEnum language : LangCodeEnum.values()) {
            if (language.getLangCode().equals(code)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 获取请求头中的语言编码
     * @return 请求头中的语言编码
     */
    public static String getHeaderLangCode() {
        // 获取请求头中的语言编码
        return TranslateThreadLocal.getLangCode();
    }

    /**
     * 兼容舊版本的语言编码
     * @param oldCode 舊版本的语言编码
     * @return 新版本的语言编码
     */
    public static String convertLangCode(String oldCode) {
        String newCode = OLD_CODE_MAP.get(oldCode);
        if (newCode == null) {
            newCode = oldCode;
        }
        return newCode;
    }
}
